/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.switz.agendacita.persistence;

import com.switz.agendacita.dto.Agenda;
import com.switz.agendacita.dto.TipoAlarma;
import com.switz.agendacita.dto.Usuario;
import com.switz.agendacita.persistence.iface.AgendaDao;
import com.switz.agendacita.vo.ReservacionPendiente;
import com.switz.agendacita.vo.ReservacionSeleccionada;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author jose angel
 */
@Repository
public class AgendaDaoImpl extends JdbcDaoSupport implements AgendaDao {
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    @Autowired
    public AgendaDaoImpl(DataSource dataSource) {

        setDataSource(dataSource);
        this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(
				dataSource);
        
    }

//    public List getReservacionesPendientes() {
//
//        SimpleDateFormat formatoFecha = new SimpleDateFormat("yyy-MM-dd");
//        String sql = "select fecha, reservacion.horainicio, idrecordatorio, "
//                + "usuario.mail, personal.nombre, empresa.nombre, servicio.descripcion, usuario.nombre "
//                + " from reservacion inner join usuario on reservacion.idusuario = usuario.id "
//                + "inner join personal on reservacion.idpersonal = personal.id "
//                + "inner join empresa on reservacion.idempresa = empresa.id "
//                + "inner join servicio on reservacion.idservicio = servicio.id "
//                + "where fecha>'" + formatoFecha.format(new Date()) + "'";
//
//        List reservacionesPendientes =
//                getJdbcTemplate().query(sql, new ParameterizedRowMapper<ReservacionPendiente>() {
//            public ReservacionPendiente mapRow(ResultSet rs, int rowNum) throws SQLException {
//                ReservacionPendiente reservacionPendiente = new ReservacionPendiente();
//                reservacionPendiente.setFecha(rs.getDate("fecha"));
//                reservacionPendiente.setHoraInicio(rs.getTime("reservacion.horainicio"));
//                reservacionPendiente.setIdRecordatorio(rs.getInt("idrecordatorio"));
//                reservacionPendiente.setEmailUsuario(rs.getString("usuario.mail"));
//                reservacionPendiente.setNombrePersonal(rs.getString("personal.nombre"));
//                reservacionPendiente.setNombreEmpresa(rs.getString("empresa.nombre"));
//                reservacionPendiente.setDescripcionServicio(rs.getString("servicio.descripcion"));
//                reservacionPendiente.setNombreUsuario(rs.getString("usuario.nombre"));
//
//
//                return reservacionPendiente;
//            }
//        });
//
//        return reservacionesPendientes;
//    }

    @Override
    public List getHoraInicioHoraFinReservacion(java.sql.Date date, String idPersonal) {

        String query = "SELECT inicio,fin FROM agenda where ( fecha=? and idpersonal=? and status=1)";
        List reservaciones = getJdbcTemplate().query(query, new Object[]{date, idPersonal},
                ParameterizedBeanPropertyRowMapper.newInstance(Agenda.class));
        return reservaciones;
    }

    @Override
    public List getHoraInicioHoraFinReservacion(String idPersonal, java.sql.Date date, String hora) {
        String query = "SELECT inicio,fin FROM agenda where idpersonal=? and fecha=? and inicio >? and status=1";
        List reservaciones = getJdbcTemplate().query(query, new Object[]{idPersonal, date, hora},
                ParameterizedBeanPropertyRowMapper.newInstance(Agenda.class));
        return reservaciones;
    }

    @Override
    public void insertAgenda(Agenda agenda) {
        SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(
                getJdbcTemplate().getDataSource())
                .withTableName("agenda");
           SqlParameterSource parameters = new BeanPropertySqlParameterSource(agenda);
           simpleJdbcInsert.execute(parameters);
}


  

    @Override
    public void deleteAgenda(String id) {
        String query = "delete from agenda where id = ?";
        getJdbcTemplate().update(query, new Object[]{id});
    }

    @Override
    public void updateAgenda(Agenda agenda) {
        String query="UPDATE agenda SET idempresa =:idEmpresa,idservicio =:idServicio,idpersonal =:idPersonal, "
                + "idusuario=:idUsuario, fecha=:fecha, inicio=:inicio, fin=:fin, registro=:registro, status=:status WHERE id=:id";
        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(agenda);
        namedParameterJdbcTemplate.update(query, parameterSource);
    }

    @Override
    public Integer getValorAlarma(int id) {
           String query = "SELECT valor FROM tipoalarma where id=? ";
        Integer valor = (Integer) getJdbcTemplate().queryForObject(query, new Object[]{id}, Integer.class);

               
        return valor;	
    }

	@Override
	public Agenda getAgenda(String id) {
		 String query = "SELECT * FROM agenda WHERE id=?";
	        
  		 List agendaList = getJdbcTemplate().query(query, new Object[]{id},
  				 ParameterizedBeanPropertyRowMapper.newInstance(Agenda.class));
  	     Agenda agenda=agendaList.size()>0?(Agenda)agendaList.get(0):null;
  	        
  	     return agenda;
	}

	@Override
	public void updateStatusAgenda(String id) {
		String updateString="UPDATE agenda SET status=1 WHERE id=:id";
  		
  		MapSqlParameterSource params = new MapSqlParameterSource();   	   
          params.addValue("id", id);
         		
        namedParameterJdbcTemplate.update(updateString, params);
	}
    
}